require "pathname"
require "dionysus/redcarpet"
require "active_support/core_ext/object/blank"

module Dionysus
  module Redcarpet
    # This is an extension to Redcarpet that allows you to include a file, preprocessor.
    # 
    # @example README.md
    #   = This is my README
    #   <<< LICENSE.txt
    module Includes
      extend ActiveSupport::Concern

      included do
        preprocess_line do |renderer, line|
          if m = line.match(LINE_DIRECTIVE_REGEXP)
            path = Pathname.new(m[1])
            if path.file?
              newlines = path.readlines
              newlines.collect! {|ln| ln.chomp}
              newlines.shift while(newlines.first.blank?)
              newlines.pop while(newlines.last.blank?)
              line = newlines.join("\n")
              line = renderer.preprocess(line)
            else
              warn "[WARNING] Cannot find path %s to include"%[path.to_s]
            end
          end
          line
        end
      end
    end
  end
end

Redcarpet::Render::HTML.send(:include, Dionysus::Redcarpet::Includes)
